///******************** NG.Respate(C)  **********************************
//* 产品名称: Respate 科技
//* 文件名称: single.c
//* 程序作者: 雷帕特公司(南宫子萍)
//* 程序版本: V1.1														   
//* 编制日期: 2019/1/29
//* 功能描述: 系统日志
//* QQ:	2085827949
//**********************************************************************/
#include "lap_lib.h"

#include "signal.h"
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>




/*********************************************************************************
** 函数名称: lap_kill 
** 功能描述: 结束进程
** 输入参数: pid：要结束的进程        
** 输出参数: None.
** 返回参数: return .
**********************************************************************************/
void lap_kill(int pid)
{
	kill(pid,SIGKILL);
}




char LAP_SINGLE_RM_PATH[256] ={0};
/*********************************************************************************
** 函数名称: _lap_rmflage
** 功能描述: 清除标志位
** 输入参数: None.        
** 输出参数: None.
** 返回参数: return .
**********************************************************************************/
void _lap_rmflage(void)
{
	int ret = -1;
	char rmcmd[60] ="rm -f ";
	strcat(rmcmd,LAP_SINGLE_RM_PATH);
	ret = system(rmcmd);
	lap_errneg(ret,NULL,"_lap_rmflage err!");//错误检查
}



/*********************************************************************************
** 函数名称: lap_syslog
** 功能描述: 让此调用此函数的程序 只能有一个正在运行
** 输入参数: None.        
** 输出参数: None.
** 返回参数: return .
**********************************************************************************/
void lap_single(const char * file)
{
	//判断文件传参是否为空
	if(file == NULL)
	{
		printf("lap_single file= NULL\n");
		//结束当前进程
		exit(-1);
	}
	

	//通过数组将路径传递给 _lap_rmflage函数
	memset(LAP_SINGLE_RM_PATH,0,sizeof(LAP_SINGLE_RM_PATH));
	strcpy(LAP_SINGLE_RM_PATH,file);

	//得到文件路径 
	char buff[80]={0};
	char* p = NULL;
	p =  lap_getFile(file,buff);
	if(p == NULL)	//文件为空
		printf("lap_single函数 传参的文件需要包含‘.’字符\n");
	//先创建文件路径
	lap_creatFile(buff,NULL);
	
	//尝试打开标志文件
	int fd = -1;
	fd = open(file,O_RDWR|O_TRUNC|O_EXCL|O_CREAT,0664);
	if(fd < 0)
	{
		if(errno == EEXIST)
			printf("\n请不要重复运行!\n 此程序正在运行ing..... \n");
		else
			printf("lap_single other ERR..... \n");
		
		//结束当前进程
		exit(-1);
	}
	
	//注册文件清理函数（主函数退出时自动调用）
	atexit(_lap_rmflage);
	
	close(fd);
	return ;
}




#if 0	//功能测试
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>


int main(void)
{
	lap_single("test.lap");

	int i=15;
	while(i--)
		sleep(1);
	return 0;
}
#endif







																						 
